home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Snippets / StandardGetFolder / Bullseye Get Folder source / bullMenus.c next >
Encoding:
C/C++ Source or Header  |  1993-06-16  |  3.5 KB  |  183 lines  |  [TEXT/KAHL]

  1. /*****
  2.  * bullMenus.c
  3.  *
  4.  *    Routines for Bullseye demo menus.
  5.  *
  6.  *****/
  7.  
  8. #include "bullMenus.h"
  9. #include "bullWindow.h"
  10. #include "StandardGetFolder.h"
  11.  
  12. void DoUpdate (EventRecord *theEvent);
  13.  
  14.  
  15. extern    WindowPtr bullseyeWindow;
  16. extern    int    width;
  17.  
  18.  
  19. MenuHandle    appleMenu, fileMenu, editMenu, widthMenu;
  20.  
  21. enum    {
  22.     appleID = 1,
  23.     fileID,
  24.     editID,
  25.     widthID
  26.     };
  27.  
  28. enum    {
  29.     openItem = 1,
  30.     closeItem,
  31.     quitItem = 4
  32.     };
  33.  
  34.  
  35. /****
  36.  * SetUpMenus()
  37.  *
  38.  *    Set up the menus. Normally, we’d use a resource file, but
  39.  *    for this example we’ll supply “hardwired” strings.
  40.  *
  41.  ****/
  42.  
  43. void SetUpMenus(void)
  44.  
  45. {
  46.     InsertMenu(appleMenu = NewMenu(appleID, "\p\024"), 0);
  47.     InsertMenu(fileMenu = NewMenu(fileID, "\pFile"), 0);
  48.     InsertMenu(editMenu = NewMenu(editID, "\pEdit"), 0);
  49.     InsertMenu(widthMenu = NewMenu(widthID, "\pWidth"), 0);
  50.     DrawMenuBar();
  51.     AddResMenu(appleMenu, 'DRVR');
  52.     AppendMenu(fileMenu, "\pOpen/O;Close/W;(-;Quit/Q");
  53.     AppendMenu(editMenu, "\pUndo/Z;(-;Cut/X;Copy/C;Paste/V;Clear");
  54.     AppendMenu(widthMenu, "\p1/1;2/2;3/3;4/4;5/5;6/6;7/7;8/8;9/9;10/0;11;12");
  55. }
  56. /* end SetUpMenus */
  57.  
  58.  
  59. /****
  60.  *  AdjustMenus()
  61.  *
  62.  *    Enable or disable the items in the Edit menu if a DA window
  63.  *    comes up or goes away. Our application doesn't do anything with
  64.  *    the Edit menu.
  65.  *
  66.  ****/
  67.  
  68. int enable (MenuHandle menu, short item, short ok);
  69.  
  70. void AdjustMenus(void)
  71. {
  72.     register WindowPeek wp = (WindowPeek) FrontWindow();
  73.     short kind = wp ? wp->windowKind : 0;
  74.     Boolean DA = kind < 0;
  75.     
  76.     enable(editMenu, 1, DA);
  77.     enable(editMenu, 3, DA);
  78.     enable(editMenu, 4, DA);
  79.     enable(editMenu, 5, DA);
  80.     enable(editMenu, 6, DA);
  81.     
  82.     enable(fileMenu, openItem, true);
  83.     enable(fileMenu, closeItem, DA || ((WindowPeek) bullseyeWindow)->visible);
  84.  
  85.     CheckItem(widthMenu, width, true);
  86. }
  87.  
  88.  
  89. static
  90. enable(MenuHandle menu, short item, short ok)
  91. {
  92.     if (ok)
  93.         EnableItem(menu, item);
  94.     else
  95.         DisableItem(menu, item);
  96. }
  97.  
  98.  
  99. /*****
  100.  * HandleMenu(mSelect)
  101.  *
  102.  *    Handle the menu selection. mSelect is what MenuSelect() and
  103.  *    MenuKey() return: the high word is the menu ID, the low word
  104.  *    is the menu item
  105.  *
  106.  *****/
  107.  
  108. void HandleMenu (long mSelect)
  109.  
  110. {
  111.     int            menuID = HiWord(mSelect);
  112.     int            menuItem = LoWord(mSelect);
  113.     Str255        name;
  114.     GrafPtr        savePort;
  115.     WindowPeek    frontWindow;
  116.     StandardFolderReply    reply;
  117.     
  118.     switch (menuID)
  119.       {
  120.       case    appleID:
  121.         GetPort(&savePort);
  122.         GetItem(appleMenu, menuItem, name);
  123.         OpenDeskAcc(name);
  124.         SetPort(savePort);
  125.         break;
  126.     
  127.       case    fileID:
  128.         switch (menuItem)
  129.           {
  130.           case    openItem:
  131.             ShowWindow(bullseyeWindow);
  132.             SelectWindow(bullseyeWindow);
  133.             StandardGetFolder("\pBullseye Select Folder:",&reply,DoUpdate);
  134.             break;
  135.                                 
  136.           case    closeItem:
  137.             if ((frontWindow = (WindowPeek) FrontWindow()) == 0L)
  138.               break;
  139.               
  140.             if (frontWindow->windowKind < 0)
  141.               CloseDeskAcc(frontWindow->windowKind);
  142.             else if (frontWindow = (WindowPeek) bullseyeWindow)
  143.               HideWindow(bullseyeWindow);
  144.                         break;
  145.                         
  146.           case    quitItem:
  147.             ExitToShell();
  148.             break;
  149.           }
  150.         break;
  151.                   
  152.       case    editID:
  153.         if (!SystemEdit(menuItem-1))
  154.           SysBeep(5);
  155.         break;
  156.         
  157.       case    widthID:
  158.         CheckItem(widthMenu, width, false);
  159.         width = menuItem;
  160.         InvalRect(&bullseyeWindow->portRect);
  161.         break;
  162.       }
  163. }
  164. /* end HandleMenu */
  165.  
  166. void DoUpdate (EventRecord *theEvent)
  167. {
  168.     if ((WindowPtr)(theEvent->message) == bullseyeWindow)
  169.         {
  170.         if (theEvent->what == activateEvt)
  171.             {
  172.             SetPort(bullseyeWindow);
  173.             InvalRect(&bullseyeWindow->portRect);
  174.             }
  175.         else if (theEvent->what == updateEvt)
  176.             {
  177.             BeginUpdate(bullseyeWindow);
  178.             DrawBullseye(((WindowPeek) bullseyeWindow)->hilited);
  179.             EndUpdate(bullseyeWindow);
  180.             }
  181.         }
  182. }
  183.